package com.ruoyi.common.utils.tt.date;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class SmartDateConverter {


    public static void main(String[] args) {
        System.out.println(recognizeAndFormatDate("1994年6月18日(农历五月初十)"));
        System.out.println(convertToDate("1994年6月18日(农历五月初十)"));

    }
    /**
     * 将中文日期字符串转换为Date对象
     * @param dateStr 中文日期字符串，格式为"xxxx年xx月xx日"或"xxxx年xx月"
     * @return 对应的Date对象，如果解析失败返回null
     */
    public static Date convertToDate(String dateStr) {
        if (dateStr == null || dateStr.isEmpty()) {
            return null;
        }
        dateStr= recognizeAndFormatDate(dateStr);
        if (dateStr.isEmpty()) {
            return null;
        }
        SimpleDateFormat sdf;
        if (dateStr.contains("日")) {
            sdf = new SimpleDateFormat("yyyy年MM月dd日");
        } else {
            sdf = new SimpleDateFormat("yyyy年MM月");
        }

        try {
            return sdf.parse(dateStr);
        } catch (ParseException e) {
            System.err.println("日期解析失败: " + dateStr);
            return null;
        }
    }
    /**
     * 识别并格式化中文日期字符串
     * @param input 输入的日期字符串
     * @return 格式化后的日期字符串（如果符合格式），否则返回"格式不符"
     */
    public static String recognizeAndFormatDate(String input) {
        // 修改后的正则表达式，不要求字符串结束
        String pattern = "^\\d{4}年(0?[1-9]|1[0-2])月(?:([0-2]?[1-9]|3[01])日)?";

        Pattern datePattern = Pattern.compile(pattern);
        Matcher matcher = datePattern.matcher(input);

        if (matcher.find()) {  // 使用find()而不是matches()
            // 获取匹配到的日期部分
            String datePart = matcher.group();

            // 提取年月日信息
            String year = datePart.substring(0, datePart.indexOf("年"));
            String month = datePart.substring(datePart.indexOf("年") + 1, datePart.indexOf("月"));

            // 格式化月份为两位数
            if (month.length() == 1) {
                month = "0" + month;
            }

            if (datePart.contains("日")) {
                String day = datePart.substring(datePart.indexOf("月") + 1, datePart.indexOf("日"));
                // 格式化日为两位数
                if (day.length() == 1) {
                    day = "0" + day;
                }
                return year + "年" + month + "月" + day + "日";
            } else {
                return year + "年" + month + "月";
            }
        } else {
            return "";
        }
    }


}
